1. Field of the Invention
The described embodiments are directed to peripheral devices of a computer system. In particular, the described embodiments relate to methods and processes of communication between such peripheral devices and a host unit.
2. Related Art
Personal computer (PC) designs from the early 1980s have implemented peripheral devices according to a paradigm which assigns each peripheral device a specific interrupt line. In some cases a peripheral device is assigned a direct memory access (DMA) channel. IBM and other manufactures assigned these resources to particular peripheral devices which became the standard I/O locations, interrupt lines and DMA channels used by software developers to facilitate communication with a given peripheral device.
These standard PC peripheral interfaces (e.g., serial and parallel connections) support the standard attachment of a single device. Only one peripheral device can typically be attached at any time. Thus, adding a peripheral with new design to a computer system frequently requires a costly decision of adding a new expansion card that plugs into an expansion bus (e.g., ISA/EISA or PCI) to create an attachment point for the new device. Also, these early PC designs do not support "plug and play" attachment of devices. If a new peripheral device is to be attached while the operating system of the computer system is running, the user typically needs to re-boot the computer system after attaching the device so that the Basic Input/Output System (BIOS) configures the system to associate an interrupt line with the newly attached peripheral device.
The Universal Serial Bus (USB) design standard as described in the "Universal Serial Bus Specification" (Rev. 1.0, Jan. 15, 1996) published by Compaq, Digital Equipment Corp., IBM PC Co., Intel Corp., Microsoft Corp., NEC and Northern Telecom provides a new peripheral attachment standard to overcome the above described shortcomings of the earlier scheme. In the USB architecture, multiple peripheral devices may be coupled to a single USB controller. A corresponding software driver supported by the host operating system handles inputs from the USB controller. USB systems typically include a root hub coupled to a host controller for handling all communication between the host and USB devices through a root port. USB systems support additional hubs coupled to the root port to provide additional ports for receiving USB devices.
The USB architecture categorizes peripheral devices of a computer system (e.g., a personal computer system) by classes including audio devices, communications devices, display devices, Human Interface Devices (HIDs), mass storage devices, and others. The HID class includes devices that are manipulated by humans to control some facet of a computer's operations. Devices within this class may consist of the following types:
keyboards and printing devices; PA1 front panel controls; PA1 controls associated with devices such as telephones (dialer), VCR remote controls, and game simulation devices; and PA1 devices that may not control the operation of a device, but provide data in a format similar to other HID devices.
The USB architecture defines a layered software scheme which includes, at the highest level, client drivers; at an intermediate level, USB system software; and at the lowest level, host controller software. Transactions performed over the USB are controlled by the client driver. The device (or hub client) may be class specific or vendor specific. Accordingly, each hub client requires a corresponding client driver which is tailored to the specific device class or device vendor. A client driver accesses its corresponding hub client by requesting an I/O transfer using an I/O request packet (IRP). System software allocates the necessary bandwidth for the transfer and directs the IRP to its destination hub client. The host controller software communicates with a USB host controller for the actual transmission of control and data information to and from the USB devices.
The USB architecture supports four modes of transferring data between the USB devices and the host. These types of transfers are categorized as follows: Interrupt Transfers, Bulk Transfers, Isochronous Transfers, and Control Transfers. An Interrupt Transfer is used for devices that are typically thought of as interrupt driven devices. Current USB designs typically call for periodically polling the USB devices which are interrupt driven to determine whether the device has data to transfer. Control Transfers typically send specific requests to USB devices from the host. Control Transfers are typically performed during device configuration. In a Control Transfer, a special transfer sequence is used to pass requests to a device, sometimes followed by data transfer, and concluded with a status completion indication.
A main objective of the USB architecture is to allow many types of devices to be coupled as peripherals. The host typically periodically polls devices coupled to the USB to determine the characteristics of this device. In response, the polled devices provide a number of "Descriptors" to the host software to identify its characteristics. These Descriptors include a "Device Descriptor," "Configuration Descriptor," "Interface Descriptor," and "Endpoint Descriptor." HID devices typically additionally have an "Entity Descriptor" as indicated in the "Universal Serial Bus (USB) Device Class Definition for Human Interface Devices (HID) (Version 1.0, September 1996) published by the USB Implementers' Forum.
While the USB standard provides a basic architecture which may overcome the shortcomings of the earlier systems for peripheral device attachment and communication, the USB standard does not provide significant details as to how to integrate the USB architecture into a current PC design. Thus, there is a need for developing cost effective and efficient methods for implementing the USB architecture to facilitate communication with the many types of peripheral devices which may be attached to a host computer through a USB.